package base

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
	"strconv"
	"strings"
)

// 判断成绩
func grade(score int) string  {
	g := ""
	switch {
		case score < 0 || score > 100:
			// 抛出一个异常
			panic(fmt.Sprintf("输入的成绩%d不符合！",score))
		case score < 60:
			g = "F"
		case score < 80:
			g = "C"
		case score < 90:
			g = "B"
		case score <= 100:
			g = "A"
	}

	return g
}

// 文件
func file()  {
	const filename = "a.txt"
	contents, err := ioutil.ReadFile(filename)

	// 写法一
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf("%s\n",contents)
	}

	// 写法二
	// 如果这样的写法，c 的作用域就只能在if里面使用， 之外的地方用不了
	if c, e := ioutil.ReadFile(filename); err != nil {
		fmt.Println(e)
	} else {
		fmt.Printf("%s\n",c)
	}
}

// 数值转换, 为二进制
func convertToBin(n int) string {
	result := ""
	for ; n > 0; n /= 2  {
		lsb := n % 2
		// strconv.Itoa(lsb) 是数值装换
		result = strconv.Itoa(lsb) + result
	}

	return result
}

// 读取文件
func printFile(filename string)  {
	file, err := os.Open(filename)
	if err != nil {
		panic(err)
	}

	// 一行行的读取
	scanner := bufio.NewScanner(file)
	// go语言的循环， 只有有一个可以中断的条件就可以了
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}

	// for 死循环, 只需要这么简单
	//for  {
	//	fmt.Println("abc")
	//}
}

// 读取流，然后打印
func printFileContentss(w io.Reader){

	scanner := bufio.NewScanner(w)
	for scanner.Scan() {
		fmt.Println(scanner.Text())
	}


}




func main() {
	file()
	fmt.Println(
		grade(1),
		grade(78),
	)
	fmt.Println(convertToBin(13))
	printFile("a.txt")

	s := `wewew
		wewe
			2123`

	printFileContentss(strings.NewReader(s))


}
